package org.tp;

import org.tp.*;
import java.awt.*;
import java.util.*;	
import javax.swing.JLabel;
/** stockage des variable globale dans une hashmap en fonction du nom**/
public class VarGlob {
	HashMap <String, Variable> varGlob;

	public VarGlob(){
		varGlob = new HashMap<String, Variable>();
	}
/** ajour d'une variable avec nom, type et value(AbSynt)**/
	public void addVar(String id, Type type, Object value){
		//System.out.println("AJOUT id "+id+"\n");
		varGlob.put(id,new Variable(id,type,value));
	}
/** signal l'allocation d'une variable de nom : nom**/

	public void setAlloc(String nom){
		if( this.varGlob.get(nom)!=null)
			  this.varGlob.get(nom).Alloc();
	
	}
/** renvoie si la variable a ete allouee ou non, si la variable n'existe pas 
 * la fonction renvoie true **/
	public boolean getAlloc(String nom){
		if( this.varGlob.get(nom)!=null)
			return  this.varGlob.get(nom).getAlloc();
	 return true;
	}
/** recuperation d'une variable de nom : nom**/
	public Variable getVar(String nom){
		return this.varGlob.get(nom);
	}
/** modification de la valeur de la variable de nom: nom**/
	public void setValVarGlob(String nom, Object val){
		varGlob.get(nom).setVal(val);
	}



	public void varGlobToString()
	{
		//System.out.println("AFFICHAGE VARGLOB");
		for(String i : varGlob.keySet())
		{
			varGlob.get(i).varToString();
		}		
	}
	/** VERIFICATION TYPE POUR VARIABLE GLOBALE  **/

	public void TestTypeVarGlob(String id, Object val)
	{	
		//System.out.println("id : " +id);
		StringTokenizer st = new StringTokenizer(id, "."); 
		if(st.countTokens()>1){ // CAS D'UNE STRUCTURE
			//System.out.println("STRUCTURE \n");
			/*________________________STRUCTURE_______________________________*/
			if(VerifType.getTypeStruct(st).toString().
					equals(((AbSynt)val).getType(null).toString())){
				return;
			}
			else{
				Toolkit.getDefaultToolkit().beep(); 
				String ERREUR=new String("WARNING : TYPE NOT VERFIF "+id);
				System.out.println(ERREUR);
				//System.exit(1);
			}
			//v.varToString();
		}

		/*_______________________________IDENTIFIER___________________________*/
		else{
			//System.out.println("PAS STRUCTURE");
			Variable v = varGlob.get(id);
			//v.varToString();
			if(v==null){
				Toolkit.getDefaultToolkit().beep(); 
				String ERR=new String("ERREUR : VARIABLE NOT DECLARED "+id);
				System.out.println(ERR);
				System.exit(1);
			}
			if(v!=null){
				//System.out.println("VARIABLE EXISTE"); 
				if(v.getType()!=null &&val!=null){
					if(v.getType().toString().equals(((AbSynt)val)
							.getType(v.getType()).toString())){/*ERR*/
						//	System.out.println("VERIFICATION DE TYPE OKEY");
						return;
					}
					else{
						Toolkit.getDefaultToolkit().beep(); 
						String ERRNULL=new String("" +
								" ERREUR ::::: VERIFICATION DE TYPE FALSE");
						System.out.println(ERRNULL);
						System.exit(1);
					}
				}
				else{
					Toolkit.getDefaultToolkit().beep(); 
					String ERR=new String(" ERREUR ::::: TYPE NULL");
					System.out.println(ERR);
					System.exit(1);
				}

			}
			Toolkit.getDefaultToolkit().beep(); 
			String ERR=new String(" ERREUR : VARIABLE NOT DECLARED "+id);
			System.out.println(ERR);
			System.exit(1);
		}
	}
	/*____________________________________________________________________________*/
}


